﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack
{
    public partial class FrmBancos : Form
    {
        Acciones _accionActual;
        ControlesDomicilio _controlesDomicilio;
        int _idBancoSeleccionado;

        public FrmBancos()
        {
            InitializeComponent();
            _controlesDomicilio = new ControlesDomicilio(cboProvincias);

            _accionActual = Acciones.alta;
            SeleccionarAccion();

            Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
        }

        public Banco BancoSeleccionado
        {
            get
            {
                Banco seleccionado = null;

                if (dgvBancos.SelectedRows.Count > 0)
                {
                    int idBanco = (int)dgvBancos.SelectedRows[0].Cells["IdBanco"].Value;
                    BLLBanco bllBanco = new BLLBanco();

                    seleccionado = bllBanco.TraerBanco(idBanco);
                }

                return seleccionado;
            }
        }


        void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
        {
            MessageBox.Show(e.Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

        private void CargarGrilla()
        {
            BLLBanco bllBanco = new BLLBanco();
            BLLLocalidad bllLocalidad = new BLLLocalidad();

            dgvBancos.DataSource = (from b in bllBanco.TraerBancos(txtBuscar.Text)
                                         select new
                                         {
                                             IdBanco = b.IdBanco,
                                             NombreBanco = b.NombreBanco,
                                             IdProvincia = Enum.GetName(typeof(Provincias), b.Provincia)
                                         }).ToList();
        }

        private void SeleccionarAccion()
        {
            switch (_accionActual)
            {
                case Acciones.alta:
                    this.Text = "Nuevo Banco";
                    //btnGuardar.Text = "Guardar nuevo";
                    btnAgregar.Enabled = false;
                    btnEditar.Enabled = true;
                    btnRemover.Enabled = true;

                    txtBanco.Enabled = true;
                    cboProvincias.Enabled = true;
                    break;

                case Acciones.modificacion:
                    this.Text = "Modificar Banco";
                    //btnGuardar.Text = "Guardar cambios";
                    btnEditar.Enabled = false;
                    btnRemover.Enabled = true;
                    btnAgregar.Enabled = true;

                    txtBanco.Enabled = true;
                    cboProvincias.Enabled = true;
                    break;
                default:
                    break;
            }
        }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorBancos);
            estaOK = Utilidades.ValidarDatos(this, errorBancos);

            return estaOK;
        }

        private void CargarDatosSeleccionados()
        {
            BLLLocalidad bllLocalidad = new BLLLocalidad();
            DataGridViewRow filaSeleccionada;

            if (dgvBancos.SelectedRows.Count > 0 && _accionActual != Acciones.alta)
            {
                filaSeleccionada = dgvBancos.SelectedRows[0];

                Banco miBanco = BancoSeleccionado;

                _idBancoSeleccionado = miBanco.IdBanco;
                txtBanco.Text = miBanco.NombreBanco;
                cboProvincias.SelectedIndex = (int)miBanco.Provincia;
            }
        }


        private void FrmBancos_Load(object sender, EventArgs e)
        {
            cboProvincias.SelectedIndex = 0;
            CargarGrilla();
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.alta;
            SeleccionarAccion();

            txtBanco.Text = "";
            cboProvincias.SelectedIndex = 0;
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            Banco bank = BancoSeleccionado;

            if (MessageBox.Show(string.Format("¿Eliminar banco {0}?", bank.NombreBanco), "Pregunta", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                BLLBanco bllBanco = new BLLBanco();

                try
                {
                    bllBanco.EliminarBanco(bank);
                }
                catch (BLLMagiPackException ex)
                {
                    MessageBox.Show(ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                
                CargarGrilla();
            }
        }

        private void btnEditar_Click(object sender, EventArgs e)
        {
            _accionActual = Acciones.modificacion;
            CargarDatosSeleccionados();
            SeleccionarAccion();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            BLLBanco bllBanco = new BLLBanco();

            try
            {
                if (ValidarDatos())
                {
                    Banco miBanco = new Banco();
                    miBanco.IdBanco = _idBancoSeleccionado;
                    miBanco.NombreBanco = txtBanco.Text;
                    miBanco.Provincia = _controlesDomicilio.IdProvinciaSeleccionada;

                    switch (_accionActual)
                    {
                        case Acciones.alta:
                            bllBanco.CrearBanco(miBanco);
                            miBanco = null;
                            cboProvincias.SelectedIndex = 0;
                            txtBanco.Text = string.Empty;
                            break;
                        case Acciones.modificacion:
                            bllBanco.ModificarBanco(miBanco);
                            break;
                        default:
                            break;
                    }

                    MessageBox.Show("¡Su operación se completó con éxito!", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    CargarGrilla();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            CargarGrilla();
        }

        private void dgvBancos_SelectionChanged(object sender, EventArgs e)
        {
            CargarDatosSeleccionados();
            btnRemover.Enabled = btnEditar.Enabled = dgvBancos.SelectedRows.Count > 0;
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {

        }
    }
}
